package net.linku.repository;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.linku.domain.LAMenu;
import net.linku.enums.StatusEnum;
import net.linku.mapper.LAMenuMapper;
import net.linku.model.req.login.UserRequestParams;
import net.linku.model.req.menu.AdminMenuQuery;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * LAMenuServiceRepository 继承了 MyBatis-Plus 的 ServiceImpl 类，
 * 提供了对 LAMenu 实体的数据库操作。
 * <p>
 * 该类主要用于实现根据查询条件查询菜单列表的方法。
 *
 * @author SilenceTian
 */
@Repository
public class LAMenuServiceRepository extends ServiceImpl<LAMenuMapper, LAMenu> {

    /**
     * 根据查询条件获取菜单列表。
     *
     * @param menuQuery 包含查询条件的 AdminMenuQuery 对象。
     * @return 符合条件的 LAMenu 列表。
     */
    public List<LAMenu> queryMenusByCondition(AdminMenuQuery menuQuery) {
        // 创建 LambdaQueryWrapper，用于构造查询条件
        LambdaQueryWrapper<LAMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();

        // 从查询对象中获取菜单ID列表
        List<Long> menuIds = menuQuery.getMenuIds();

        // 如果菜单ID列表不为空，则添加 in 条件
        if (CollectionUtils.isNotEmpty(menuIds)) {
            lambdaQueryWrapper.in(LAMenu::getId, menuIds);
        }

        // 添加条件，筛选未删除的菜单
        lambdaQueryWrapper.eq(LAMenu::getDeletedFlag, StatusEnum.NORMAL.getDeletedFlag());

        // 执行查询并返回结果列表
        return this.list(lambdaQueryWrapper);
    }

    /**
     * 根据租户ID和用户ID获取菜单列表。
     *
     * @param userRequestParams 用户信息
     * @return 符合条件的 LAMenu 列表。
     */
    public List<LAMenu> queryMenusByUserId(UserRequestParams userRequestParams) {
        // 调用 Mapper 中的方法，根据租户ID和用户ID查询菜单列表
        return this.baseMapper.queryMenusByUserId(userRequestParams);
    }
}
